{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# C++的程序流程结构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 程序流程结构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① C/C++支持最基本的三种程序运行结构：顺序结构、选择结构、循环结构\n",
    "\n",
    "1. 顺序结构：程序按顺序执行，不发生跳转\n",
    "2. 选择结构：依据条件是否满足，有选择的执行相应功能\n",
    "3. 循环结构：依据条件是否满足，循环多次执行某段代码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. 选择结构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 单行 if 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 单行if语句，格式：if(条件){条件满足执行的语句}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "\n",
    "    // 选择结构 单行if语句\n",
    "    // 用户输入分数，如果分数大于600，视为考上一本大学，在屏幕上输出\n",
    "\n",
    "    //1、用户输入分数\n",
    "    int score = 0;\n",
    "\n",
    "    cout << \"请输入一个分数：\" << endl;  //在C++中除了0，都为真\n",
    "    cin >> score;\n",
    "\n",
    "    //2、打印用户输入的分数\n",
    "\n",
    "    cout << \"您输入的分数为 ：\" << score << endl;\n",
    "\n",
    "    //3、判断分数是否大于600，如果大于，那么输出\n",
    "    //注意事项，if条件后面不要加分号。加了分号条件不管满足还是不满足，后面的都会运行\n",
    "    if (score > 600)\n",
    "    {\n",
    "        cout << \"恭喜您考上了一本大学\" << endl;\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请输入一个分数：  \n",
    " - 611  \n",
    " - 您输入的分数为 ：611  \n",
    " - 恭喜您考上了一本大学  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 单行 else 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 单行else语句，格式：if(条件){条件满足执行的语句} else{条件不满足执行的语句}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "\n",
    "    // 选择结构 多行if语句\n",
    "    // 输入考试分数，如果分数大于600，视为考上一本大学，在屏幕上输出\n",
    "    // 如果没考上一本大学，打印未考上一本大学\n",
    "\n",
    "    //1、输入考试分数\n",
    "    int score = 0;\n",
    "    cout << \"请输入一个考试分数\" << endl;\n",
    "    cin >> score;\n",
    "\n",
    "    //2、提示用户输入的分数\n",
    "    cout << \"您输入的分数为：\" << score << endl;\n",
    "\n",
    "    //3、判断 如果大于600，打印考上一本，否则打印未考上一本大学\n",
    "    if (score > 600) //大于600分，执行下面大括号中内容\n",
    "    {\n",
    "        cout << \"恭喜您考上了一本大学\" << endl;\n",
    "    }\n",
    "    else //不大于600分，执行else后大括号中内容\n",
    "    {\n",
    "        cout << \"未考上一本大学\" << endl;\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请输入一个考试分数  \n",
    " - 490  \n",
    " - 您输入的分数为：490  \n",
    " - 未考上一本大学  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.3 多条件的 if 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 多条件的if语句，格式：if(条件1){条件1满足执行的语句}else if(条件){条件2满足执行的语句}....else{都不满足时执行的语句}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    // 选择结构 多条件if语句\n",
    "    // 输入一个考试分数，\n",
    "    // 如果分数大于600，视为考上一本大学，在屏幕上输出\n",
    "    // 如果分数大于500，视为考上二本大学，在屏幕上输出\n",
    "    // 如果分数大于400，视为考上三本大学，在屏幕上输出\n",
    "    // 如果小于等于400，视为未考上本科，屏幕上输出\n",
    "\n",
    "    //1、输入考试分数\n",
    "    int score = 0;\n",
    "    cout << \"请输入一个考试分数\" << endl;\n",
    "    cin >> score;\n",
    "\n",
    "    //2、提示用户输入的分数\n",
    "    cout << \"您输入的分数为：\" << score << endl;\n",
    "\n",
    "    //3、判断 \n",
    "    // 如果大于600，考上一本\n",
    "    // 如果大于500，考上二本\n",
    "    // 如果大于400，考上三本\n",
    "    // 如果小于等于400，未考上本科\n",
    "    if (score > 600) \n",
    "    {\n",
    "        cout << \"恭喜您考上了一本大学\" << endl;\n",
    "    }\n",
    "    else if (score > 500) \n",
    "    {\n",
    "        cout << \"恭喜您考上了二本大学\" << endl;\n",
    "    }\n",
    "    else if (score > 400) \n",
    "    {\n",
    "        cout << \"恭喜您考上了三本大学\" << endl;\n",
    "    }\n",
    "    else \n",
    "    {\n",
    "        cout << \"未考上本科大学\" << endl;\n",
    "    }\n",
    "    \n",
    "    system(\"pause\");\n",
    "    \n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请输入一个考试分数  \n",
    " - 430  \n",
    " - 您输入的分数为：430  \n",
    " - 恭喜您考上了三本大学  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.4 嵌套 if 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 嵌套if语句，在if语句中可以嵌套使用if语句，达到更精确的条件判断。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "\n",
    "    // 选择结构 嵌套if语句\n",
    "\n",
    "    //1、提示高考分数\n",
    "    int score = 0;\n",
    "    cout << \"请输入一个考试分数\" << endl;\n",
    "    cin >> score;\n",
    "\n",
    "    //2、提示用户输入的分数\n",
    "    cout << \"您输入的分数为：\" << score << endl;\n",
    "\n",
    "    //3、判断 \n",
    "    if (score > 600) \n",
    "    {\n",
    "        cout << \"恭喜您考上了一本大学\" << endl;\n",
    "        if (score > 700)\n",
    "        {\n",
    "            cout << \"您能考上了北京大学\" << endl;\n",
    "        }\n",
    "        else if (score > 650)\n",
    "        {\n",
    "            cout << \"您能考上了清华大学\" << endl;\n",
    "        }\n",
    "        else\n",
    "        {\n",
    "            cout << \"您能考上了人名大学\" << endl;\n",
    "        }\n",
    "    }\n",
    "    else if (score > 500)\n",
    "    {\n",
    "        cout << \"恭喜您考上了二本大学\" << endl;\n",
    "    }\n",
    "    else if (score > 400)\n",
    "    {\n",
    "        cout << \"恭喜您考上了三本大学\" << endl;\n",
    "    }\n",
    "    else\n",
    "    {\n",
    "        cout << \"未考上本科大学\" << endl;\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请输入一个考试分数  \n",
    " - 670  \n",
    " - 您输入的分数为：670  \n",
    " - 恭喜您考上了一本大学  \n",
    " - 您能考上了清华大学  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.5 三目运算符"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 作用：通过三目运算符实现简单的判断。\n",
    "\n",
    "② 语法：表达式1 ? 表达式2 : 表达式3\n",
    "\n",
    "1. 如果表达式1的值为真，执行表达式2，并返回表达式2的结果。\n",
    "2. 如果表达式1的值为假，执行表达式3，并返回表达式3的结果。\n",
    "\n",
    "③ 三目运算符可以用在显示语句中，cout << \"c = \" << c == 1 ? \"男\" : \"女\" << endl。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    // 创建三个变量 a b c\n",
    "    // 将a和b做比较，将变量大的值赋值给变量c\n",
    "\n",
    "    int a = 10;\n",
    "    int b = 20;\n",
    "    int c = 0;\n",
    "\n",
    "    c = (a > b ? a : b); //可以将运算的结果的变量的值赋值给变量\n",
    "\n",
    "    cout << \"c = \" << c << endl;\n",
    "\n",
    "    //在C++中三目运算符返回的是变量，可以继续赋值\n",
    "    (a > b ? a : b) = 100;\n",
    "    cout << \"a = \" << a << endl;  //可以将运算的结果右值作为变量来赋值\n",
    "    cout << \"b = \" << b << endl;\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - c = 20  \n",
    " - a = 10  \n",
    " - b = 100  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.6 switch 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① switch语句用于执行多条件分支语句。\n",
    "\n",
    "② switch语句中表达式类型只能是整型或者字符型。\n",
    "\n",
    "③ case里如果没有break，那么程序会一直向下执行。\n",
    "\n",
    "④ 与if语句比，对于多条件判断时，switch的结构清晰，执行效率高，缺点是switch不可以判断区间。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //1、提示用户给电影评分\n",
    "    cout << \"请给电影进行评分\" << endl;\n",
    "\n",
    "    //2、用户开始进行打分\n",
    "    int score = 0;\n",
    "    cin >> score;\n",
    "    cout << \"您打的分数为：\" << score << endl;\n",
    "\n",
    "    //3、根据用户输入的分数来提示用户最后的结果\n",
    "    switch (score)\n",
    "    {\n",
    "    case 10:\n",
    "        cout << \"您认为是经典的电影\" << endl; \n",
    "        break;\n",
    "    case 9:\n",
    "        cout << \"您认为是经典的电影\" << endl;\n",
    "        break;\n",
    "    case 8:\n",
    "        cout << \"您认为电影非常好\" << endl;\n",
    "        break;\n",
    "    case 7:\n",
    "        cout << \"您认为电影还行\" << endl;\n",
    "        break;\n",
    "    case 6:\n",
    "        cout << \"您认为电影一般\" << endl;\n",
    "        break;\n",
    "    default:  //前面都不满足，就会执行default语句\n",
    "        cout << \"您认为电影是烂片\" << endl;\n",
    "        break;\n",
    "    }\n",
    "\n",
    "    //if 和 switch 区别：\n",
    "    //switch 缺点，判断的时候只能是整型或者字符型，不可以是一个区间。\n",
    "    //switch 优点，结构清晰，执行效率高。\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请给电影进行评分  \n",
    " - 8  \n",
    " - 您打的分数为：8  \n",
    " - 您认为电影非常好  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.7 三只小猪称体重"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "题目：现有三只小猪ABC，请分别输入三只小猪的体重，并且判断哪只小猪最重。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //三只小猪称体重，判断哪只最重\n",
    "\n",
    "    //1、创建三只小猪的体重变量\n",
    "    int num1 = 0;\n",
    "    int num2 = 0;\n",
    "    int num3 = 0;\n",
    "\n",
    "    //2、让用户输入三只小猪的重量\n",
    "    cout << \"请输入小猪A的体重\" << endl;\n",
    "    cin >> num1;\n",
    "\n",
    "    cout << \"请输入小猪B的体重\" << endl;\n",
    "    cin >> num2;\n",
    "\n",
    "    cout << \"请输入小猪C的体重\" << endl;\n",
    "    cin >> num3;\n",
    "\n",
    "    cout << \"小猪A的体重为：\" << num1 << endl;\n",
    "    cout << \"小猪B的体重为：\" << num2 << endl;\n",
    "    cout << \"小猪C的体重为：\" << num3 << endl;\n",
    "\n",
    "    //3、判断哪只最重\n",
    "    //先判断A和B重量\n",
    "    if (num1 > num2)  //A比B重\n",
    "    {\n",
    "        if (num1 > num3)  //A比C重\n",
    "        {\n",
    "            cout << \"小猪A最重\" << endl;\n",
    "        }\n",
    "        else\n",
    "        {\n",
    "            cout << \"小猪C最重\" << endl;\n",
    "        }\n",
    "    }\n",
    "    else  //B比A重\n",
    "    {\n",
    "        if (num2 > num3)  //B比C重\n",
    "        {\n",
    "            cout << \"小猪B最重\" << endl;\n",
    "        }\n",
    "        else //C比B重\n",
    "        {\n",
    "            cout << \"小猪C最重\" << endl;\n",
    "        }\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "    \n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请输入小猪A的体重  \n",
    " - 100  \n",
    " - 请输入小猪B的体重  \n",
    " - 230  \n",
    " - 请输入小猪C的体重  \n",
    " - 300  \n",
    " - 小猪A的体重为：100  \n",
    " - 小猪B的体重为：230  \n",
    " - 小猪C的体重为：300  \n",
    " - 小猪C最重  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. 循环结构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1 while 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 作用：满足循环条件时，执行循环语句。\n",
    "\n",
    "② 语法：while(循环条件) {循环语句}。\n",
    "\n",
    "③ 解释：只要循环条件的结果为真，就执行循环语句。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //while循环\n",
    "    //在屏幕中打印 0~9 这10个数字\n",
    "    int num = 0;\n",
    "\n",
    "    //while()中填入循环条件\n",
    "    //在写循环的时候，一定要避免死循环的出现\n",
    "    while (num < 10)  //如果循环条件写1，为表示死循环，一直循环下去\n",
    "    {\n",
    "        cout << num << endl;\n",
    "        num++;\n",
    "    }\n",
    "\n",
    "    // 在执行循环语句时候，程序必须提供跳出循环的出口，否则出现死循环。\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 0  \n",
    " - 1  \n",
    " - 2  \n",
    " - 3  \n",
    " - 4  \n",
    " - 5  \n",
    " - 6  \n",
    " - 7  \n",
    " - 8  \n",
    " - 9  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.2 do while 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 满足循环条件，执行循环语句。\n",
    "\n",
    "② 语法：do{循环语句} while(循环条件);\n",
    "\n",
    "③ 与while的区别在于 do...while会先执行一次循环语句，再判断循环条件。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //do...while语句\n",
    "    //在屏幕中输出 0 到 9 这10个数字\n",
    "\n",
    "    int num = 0;\n",
    "    do\n",
    "    {\n",
    "        cout << num << endl;\n",
    "        num++;\n",
    "    } \n",
    "    while (num < 10);\n",
    "\n",
    "    //do...while和while循环区别在于 do...while会先执行一次循环语句\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 0  \n",
    " - 1  \n",
    " - 2  \n",
    " - 3  \n",
    " - 4  \n",
    " - 5  \n",
    " - 6  \n",
    " - 7  \n",
    " - 8  \n",
    " - 9  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.3 for 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① for循环，满足循环条件，执行循环语句。\n",
    "\n",
    "② for(起始表达式(①)；条件表达式②；末尾表达式③) { 循环语句④ }\n",
    "\n",
    "1. 先执行①，初始化\n",
    "2. 再执行②，进行判断\n",
    "3. 再执行④，进行一次循环\n",
    "4. 再执行③，执行一次末尾表达式\n",
    "\n",
    "③ for循环中的表达式，要用分号进行分隔。\n",
    "\n",
    "④ while、for...while、for都是开发中常用的循环语句，for循环结构比较清晰，比较常用。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //for循环\n",
    "    //从数字0 打印到 数字9\n",
    "\n",
    "    for (int i = 0; i < 10; i++)\n",
    "    {\n",
    "        cout << i << endl;\n",
    "    }\n",
    "\n",
    "    /*\n",
    "    第二种方式\n",
    "    int i = 0\n",
    "    for (; i < 10; i++)\n",
    "    {\n",
    "        cout << i << endl;\n",
    "    }\n",
    "    */\n",
    "\n",
    "\n",
    "    /*\n",
    "    第三种方式\n",
    "    int i = 0\n",
    "    for (; ; i++)\n",
    "    {\n",
    "        if(i >= 10)\n",
    "        {\n",
    "            break;\n",
    "        }\n",
    "        cout << i << endl;\n",
    "    }\n",
    "    */\n",
    "\n",
    "    /*\n",
    "    第四种方式\n",
    "    int i = 0\n",
    "    for (; ; )\n",
    "    {\n",
    "        if(i >= 10)\n",
    "        {\n",
    "            break;\n",
    "        }\n",
    "        cout << i << endl;\n",
    "        i++;\n",
    "    }\n",
    "    */\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 0  \n",
    " - 1  \n",
    " - 2  \n",
    " - 3  \n",
    " - 4  \n",
    " - 5  \n",
    " - 6  \n",
    " - 7  \n",
    " - 8  \n",
    " - 9  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.4 for 嵌套"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 在循环体中再嵌套一层循环，可以解决一些实际问题，例如我们想在屏幕中打印十行十列的星图，就需要利用嵌套循环。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //利用嵌套循环实现星图\n",
    "    //外层执行一次，内层执行一周\n",
    "    //外层循环\n",
    "    for (int i = 0; i < 10; i++)\n",
    "    {\n",
    "        //内层循环\n",
    "        for (int j = 0; j < 10; j++)\n",
    "        {\n",
    "            cout << \"*\";\n",
    "        }\n",
    "        cout << endl;\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    "     \n",
    "    **********\n",
    "    ********** \n",
    "    **********\n",
    "    **********\n",
    "    **********\n",
    "    **********\n",
    "    **********\n",
    "    **********\n",
    "    **********\n",
    "    **********\n",
    "    请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.5 猜数字"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 案例描述：系统随机生成一个1到100之间的数字，玩家进行猜测，如果猜错，提示玩家数字过大或过小，如果猜对恭喜玩家胜利，并且退出游戏。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "#include<ctime> //time系统时间头文件\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //添加随机数种子，作用利用当前系统时间生成随机数，防止每次随机数都一样\n",
    "    srand((unsigned int)time(NULL));\n",
    "\n",
    "    //1、系统生成随机数\n",
    "    int num = rand() % 100 + 1; //rand()%100 生成 0+1 ~ 99+1 随机数\n",
    "    //cout << num << endl;      //不显示生成的随机数是多少\n",
    "\n",
    "    //2、玩家进行猜测\n",
    "    int val = 0;  //玩家输入的数据\n",
    "\n",
    "    while (1)\n",
    "    {\n",
    "        cin >> val;\n",
    "\n",
    "        //3、判断玩家的判断\n",
    "        if (val > num)\n",
    "        {\n",
    "            cout << \"猜测过大\" << endl;\n",
    "        }\n",
    "        else if (val < num)\n",
    "        {\n",
    "            cout << \"猜测过小\" << endl;\n",
    "        }\n",
    "        else\n",
    "        {\n",
    "            cout << \"猜测您猜对了\" << endl;\n",
    "            break;  //break在循环中，可以利用该关键字来退出当前循环\n",
    "        }\n",
    "    }\n",
    "    \n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 32  \n",
    " - 猜测过小  \n",
    " - 60  \n",
    " - 猜测过大  \n",
    " - 54  \n",
    " - 猜测过大  \n",
    " - 40  \n",
    " - 猜测过大  \n",
    " - 38  \n",
    " - 猜测过大  \n",
    " - 35  \n",
    " - 猜测过大  \n",
    " - 33  \n",
    " - 猜测您猜对了  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.6 水仙花数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "案例描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身\n",
    "\n",
    "例如：1^3 + 5^3 + 3^3 = 153\n",
    "\n",
    "题目：请利用 do...while语句，求出所有3位数中的水仙花数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //1、先打印所有的三位数字\n",
    "    int num = 100;\n",
    "\n",
    "    do\n",
    "    {\n",
    "        //2、从所有三位数中找到水仙花数\n",
    "        int a = 0;  //个位\n",
    "        int b = 0;  //十位\n",
    "        int c = 0;  //百位\n",
    "\n",
    "        a = num % 10; //获取数字的个位\n",
    "        b = num / 10 % 10; //获取数字的十位\n",
    "        c = num / 100; //获取数字的百位\n",
    "        if (a * a * a + b * b * b + c*c*c== num) //如果是水仙花数，才打印\n",
    "        {\n",
    "            cout << num << endl;\n",
    "        }\n",
    "        num++;\n",
    "    } while (num < 1000);\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 153  \n",
    " - 370  \n",
    " - 371  \n",
    " - 407  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.7 敲桌子"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "案例分析：从1开始数到数字100，如果数字个位含有7，或者数字十位含有7，或者该数字是7的倍数，我们打印敲桌子，其余数字直接打印输出。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //敲桌子案例\n",
    "    for (int i = 1; i <= 100; i++)\n",
    "    {\n",
    "        //2、从100个数字中找到特殊数字，打印“敲桌子”\n",
    "        //如果是7的倍数、个位有7、或者十位有7，打印敲桌子\n",
    "        if (i % 7 == 0 || i % 10 == 7 || i/10 == 7) //如果是特殊数字，打印敲桌子\n",
    "        {\n",
    "            cout << \"敲桌子\" << endl;\n",
    "        }\n",
    "        else //如果不是特殊数字，才打印数字\n",
    "        {\n",
    "            cout << i << endl;\n",
    "        }\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 1  \n",
    " - 2  \n",
    " - 3  \n",
    " - 4  \n",
    " - 5  \n",
    " - 6  \n",
    " - 敲桌子  \n",
    " - 8  \n",
    " - 9  \n",
    " - 10  \n",
    " - 11  \n",
    " - 12  \n",
    " - 13  \n",
    " - 敲桌子  \n",
    " - 15  \n",
    " - 16  \n",
    " - 敲桌子  \n",
    " - 18  \n",
    " - 19  \n",
    " - 20  \n",
    " - 敲桌子  \n",
    " - 22  \n",
    " - 23  \n",
    " - 24  \n",
    " - 25  \n",
    " - 26  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 29  \n",
    " - 30  \n",
    " - 31  \n",
    " - 32  \n",
    " - 33  \n",
    " - 34  \n",
    " - 敲桌子  \n",
    " - 36  \n",
    " - 敲桌子  \n",
    " - 38  \n",
    " - 39  \n",
    " - 40  \n",
    " - 41  \n",
    " - 敲桌子  \n",
    " - 43  \n",
    " - 44  \n",
    " - 45  \n",
    " - 46  \n",
    " - 敲桌子  \n",
    " - 48  \n",
    " - 敲桌子  \n",
    " - 50  \n",
    " - 51  \n",
    " - 52  \n",
    " - 53  \n",
    " - 54  \n",
    " - 55  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 58  \n",
    " - 59  \n",
    " - 60  \n",
    " - 61  \n",
    " - 62  \n",
    " - 敲桌子  \n",
    " - 64  \n",
    " - 65  \n",
    " - 66  \n",
    " - 敲桌子  \n",
    " - 68  \n",
    " - 69  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 80  \n",
    " - 81  \n",
    " - 82  \n",
    " - 83  \n",
    " - 敲桌子  \n",
    " - 85  \n",
    " - 86  \n",
    " - 敲桌子  \n",
    " - 88  \n",
    " - 89  \n",
    " - 90  \n",
    " - 敲桌子  \n",
    " - 92  \n",
    " - 93  \n",
    " - 94  \n",
    " - 95  \n",
    " - 96  \n",
    " - 敲桌子  \n",
    " - 敲桌子  \n",
    " - 99  \n",
    " - 100  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.8 乘法口诀"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "案例描述：利用嵌套循环，实现九九乘法表。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //乘法口诀表\n",
    "    for (int i = 1; i <= 9; i++)\n",
    "    {\n",
    "        for (int j = 1; j <= i; j++)\n",
    "        {\n",
    "            cout << j << \"*\" << i << \"=\" << j * i << \" \";\n",
    "        }\n",
    "        cout << endl;\n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：\n",
    "       \n",
    "       1*1=1\n",
    "       1*2=2 2*2=4\n",
    "       1*3=3 2*3=6  3*3=9\n",
    "       1*4=4 2*4=8  3*4=12 4*4=16 \n",
    "       1*5=5 2*5=10 3*5=15 4*5=20 5*5=25\n",
    "       1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36  \n",
    "       1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49\n",
    "       1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64       \n",
    "       1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81          \n",
    "       请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. 跳转语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.1 break 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 用于跳出选择结构或者循环结构。\n",
    "\n",
    "② break使用时机：\n",
    "\n",
    "1. 出现在switch条件语句中，作用是终止case并跳出switch。\n",
    "2. 出现在循环语句中，作用是跳出当前的循环语句。\n",
    "3. 出现在嵌套循环中，跳出最近的内层循环语句。\n",
    "\n",
    "③ break如果使用在switch-case中，并且case前面有一大段代码，就会报错，把前面一大堆代码用括号括起来{}，编译器认为是一段代码，就不会报错了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //break的使用时机\n",
    "\n",
    "    //1、出现在switch语句中\n",
    "    cout << \"请选择副本难度\" << endl;\n",
    "    cout << \"1、普通\" << endl;\n",
    "    cout << \"2、中等\" << endl;\n",
    "    cout << \"3、困难\" << endl;\n",
    "\n",
    "    int select = 0; \n",
    "    cin >> select; //等待用户输入\n",
    "\n",
    "    switch (select)\n",
    "    {\n",
    "    case 1:\n",
    "        cout << \"您选择的是普通难度\" << endl;\n",
    "        break; //退出switch语句\n",
    "    case 2:\n",
    "        cout << \"您选择的是中等难度\" << endl;\n",
    "        break;\n",
    "    case 3:\n",
    "        cout << \"您选择的是困难难度\" << endl;\n",
    "        break;\n",
    "    }\n",
    "\n",
    "    //2、出现在循环语句中\n",
    "    for (int i=0; i < 10; i++)\n",
    "    {\n",
    "        //如果i等于5，退出循环，不再打印\n",
    "        if (i == 5)\n",
    "        {\n",
    "            break; //退出循环\n",
    "        }\n",
    "        cout << i << endl;\n",
    "    }\n",
    "    \n",
    "    //3、出现在嵌套循环语句中\n",
    "    for (int i = 0; i < 10; i++)\n",
    "    {\n",
    "        for (int j = 0; j < 10; j++)\n",
    "        {\n",
    "            if (j == 5)\n",
    "            {\n",
    "                break; //退出内存循环\n",
    "            }\n",
    "            cout << \"*\";\n",
    "        }\n",
    "        cout << endl;\n",
    "    }\n",
    "    system(\"pause\");\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 请选择副本难度  \n",
    " - 1、普通  \n",
    " - 2、中等  \n",
    " - 3、困难  \n",
    " - 2  \n",
    " - 您选择的是中等难度  \n",
    " - 0  \n",
    " - 1  \n",
    " - 2  \n",
    " - 3  \n",
    " - 4  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - $*****$  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.2 continue 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //continue的使用时机\n",
    "    \n",
    "    for (int i = 0; i <= 100; i++)\n",
    "    {\n",
    "        // 如果是奇数就输出，如果是偶数就不输出\n",
    "        if (i % 2 == 0) \n",
    "        {\n",
    "            continue; //continue可以筛选条件，执行到此就不再向下执行了，直接执行下一次循环\n",
    "        }\n",
    "        cout << i << endl;\n",
    "        \n",
    "    }\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 1  \n",
    " - 3  \n",
    " - 5  \n",
    " - 7  \n",
    " - 9  \n",
    " - 11  \n",
    " - 13  \n",
    " - 15  \n",
    " - 17  \n",
    " - 19  \n",
    " - 21  \n",
    " - 23  \n",
    " - 25  \n",
    " - 27  \n",
    " - 29  \n",
    " - 31  \n",
    " - 33  \n",
    " - 35  \n",
    " - 37  \n",
    " - 39  \n",
    " - 41  \n",
    " - 43  \n",
    " - 45  \n",
    " - 47  \n",
    " - 49  \n",
    " - 51  \n",
    " - 53  \n",
    " - 55  \n",
    " - 57  \n",
    " - 59  \n",
    " - 61  \n",
    " - 63  \n",
    " - 65  \n",
    " - 67  \n",
    " - 69  \n",
    " - 71  \n",
    " - 73  \n",
    " - 75  \n",
    " - 77  \n",
    " - 79  \n",
    " - 81  \n",
    " - 83  \n",
    " - 85  \n",
    " - 87  \n",
    " - 89  \n",
    " - 91  \n",
    " - 93  \n",
    " - 95  \n",
    " - 97  \n",
    " - 99  \n",
    " - 请按任意键继续. . ."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4.3 goto 语句"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "① 可以无条件跳转语句。\n",
    "\n",
    "② 语法：goto 标记；\n",
    "\n",
    "1. 如果标记名称存在，执行到goto语句时，会跳转到标记的位置。\n",
    "\n",
    "③ 在程序中不建议使用goto语句，以免造成程序流程混乱。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#include <iostream>\n",
    "using namespace std;\n",
    "\n",
    "int main()\n",
    "{\n",
    "    //continue的使用时机\n",
    "    \n",
    "    cout << \"1\" << endl;\n",
    "    \n",
    "    goto FLAG;  //这里是分号\n",
    "    \n",
    "    cout << \"2\" << endl;\n",
    "\n",
    "    cout << \"3\" << endl;\n",
    "\n",
    "    cout << \"4\" << endl;\n",
    "\n",
    "    FLAG:  //这里是冒号\n",
    "\n",
    "    cout << \"5\" << endl;\n",
    "\n",
    "    cout << \"6\" << endl;\n",
    "\n",
    "    system(\"pause\");\n",
    "\n",
    "    return 0;\n",
    "\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "运行结果：  \n",
    " - 1  \n",
    " - 5  \n",
    " - 6  \n",
    " - 请按任意键继续. . ."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.6.3",
   "language": "python",
   "name": "python3.6.3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "384px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
